package routers

import (
	"bytes"
	"research/xbdb"
	"strconv"
	"strings"
	"sync"
)

var bufpool = sync.Pool{
	New: func() interface{} {
		return new(bytes.Buffer)
	},
}

/*
//根据索引查询表记录并组织json数据
func IdxGetDataToJson(tbname, idxfield, idxvalue []byte) (r *bytes.Buffer) {
	kvs := Table[string(tbname)].Select.WhereIdx(idxfield, idxvalue, 0, -1)
	if kvs == nil {
		return
	}
	r = DataToJson(kvs, Table[string(tbname)].Ifo)
	return
}
*/
//根据表记录组织json数据
func DataToJson(kvs []xbdb.KV, Seltbifo xbdb.TableInfo) (r *bytes.Buffer) {
	if kvs == nil {
		return
	}
	r = bufpool.Get().(*bytes.Buffer)
	var value, ks [][]byte

	var pk []byte
	jsonstr := ""
	/*
		[{"id":2,"title":"金刚经","fid":1,"isleaf":"0"},
		{"id":3,"title":"六祖坛经","fid":1,"isleaf":"0"}]
	*/
	//r.WriteString("\"r\":")
	r.WriteString("[")
	for j, kv := range kvs {
		if kv.V == nil {
			continue
		}
		r.WriteString("{")
		ks = bytes.Split(kv.K, []byte(xbdb.Split)) //strings.Split(kv.K, xbdb.Split)
		pk = ks[len(ks)-1]
		//最后一个是id值(兼容整个key或单值的情况)
		value = bytes.Split(xbdb.JoinBytes(pk, []byte(xbdb.Split), kv.V), []byte(xbdb.Split)) //strings.Split(pk+xbdb.Split+kv.V, xbdb.Split) //主键+其他=完整的一条记录的字符串连接（pkv+xbdb.Split+string(rd)）

		for i, fv := range Seltbifo.FieldType {
			switch fv {
			case "int": //该项目其他类型暂时没有用到
				iv := xbdb.BytesToInt(value[i])
				jsonstr = "\"" + Seltbifo.Fields[i] + "\":" + strconv.Itoa(iv) + ""
			default:
				jsonstr = "\"" + Seltbifo.Fields[i] + "\":\"" + string(value[i]) + "\""
			}
			if i != len(Seltbifo.FieldType)-1 {
				jsonstr += ","
			}
			jsonstr = strings.Replace(jsonstr, "\n", "", -1) //json值不能带\n
			r.WriteString(jsonstr)
		}
		r.WriteString("}")
		if j != len(kvs)-1 {
			r.WriteString(",")
		}
	}
	r.WriteString("]")
	return
}
